bondscell_results2$b185e8b7-4914-4f78-9f19-690c2a412ed4queued¤logsrunning¦outputbodyv

Submission

To submit this notebook, please use the "Export to HTML" feature from Pluto (documentation) to get the HTML file to submit. You can also submit a .jl Julia file. PDF is not accepted.

mimetext/htmlrootassigneelast_run_timestampA}+3gɰpersist_js_state÷has_pluto_hook_features§cell_id$b185e8b7-4914-4f78-9f19-690c2a412ed4depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$e55511e0-d714-4d37-91e9-0e1aa932541fqueued¤logsrunning¦outputbody

Exercise: Sensor Reliability

mimetext/htmlrootassigneelast_run_timestampA}+4 FJpersist_js_state·has_pluto_hook_features§cell_id$e55511e0-d714-4d37-91e9-0e1aa932541fdepends_on_disabled_cells§runtimeͲܵpublished_object_keysdepends_on_skipped_cells§errored$3f54c54b-7f29-44f8-b409-06e43e5f7d78queued¤logsrunning¦outputbody

Exercise: Sensor Fusion

mimetext/htmlrootassigneelast_run_timestampA}+42%persist_js_state·has_pluto_hook_features§cell_id$3f54c54b-7f29-44f8-b409-06e43e5f7d78depends_on_disabled_cells§runtimeDpublished_object_keysdepends_on_skipped_cells§errored$02ee0c67-c31e-4db7-92a7-41aafa829d13queued¤logsrunning¦outputbody*

Part 2: Estimating the x-Position

Now that we understand the sensor noise, we want to estimate the robot's x-coordinate inside the warehouse. Two independent sets of measurements are available:

Each observation is an independent, noisy measurement of the robot's true x-coordinate.

mimetext/htmlrootassigneelast_run_timestampA}+4=persist_js_state·has_pluto_hook_features§cell_id$02ee0c67-c31e-4db7-92a7-41aafa829d13depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$c4aa8122-4ada-4fb6-af5d-286992e42820queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}+8persist_js_state·has_pluto_hook_features§cell_id$c4aa8122-4ada-4fb6-af5d-286992e42820depends_on_disabled_cells§runtime,hXpublished_object_keysdepends_on_skipped_cells§errored$767447b1-080b-411b-83d5-d0cb75e290d4queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}*?persist_js_state·has_pluto_hook_features§cell_id$767447b1-080b-411b-83d5-d0cb75e290d4depends_on_disabled_cells§runtimeFCpublished_object_keysdepends_on_skipped_cells§errored$daac2bd0-cfd2-45b9-8675-38b0e5484771queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}*persist_js_state·has_pluto_hook_features§cell_id$daac2bd0-cfd2-45b9-8675-38b0e5484771depends_on_disabled_cells§runtimeFpublished_object_keysdepends_on_skipped_cells§errored$ccf48c15-7aad-445e-86ef-b7c5b02abfdequeued¤logsrunning¦outputbodyA

I chose this prior because...

mimetext/htmlrootassigneereliability_prior_commentlast_run_timestampA}+4&ppersist_js_state·has_pluto_hook_features§cell_id$ccf48c15-7aad-445e-86ef-b7c5b02abfdedepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$7dcd02eb-7d02-4e2b-8610-936b0b19307equeued¤logsrunning¦outputbodys

Fill in your result above to see the estimated bias.

mimetext/htmlrootassigneelast_run_timestampA}+4persist_js_state·has_pluto_hook_features§cell_id$7dcd02eb-7d02-4e2b-8610-936b0b19307edepends_on_disabled_cells§runtime)published_object_keysdepends_on_skipped_cells§errored$4a699a86-e664-4049-8421-6b39a07ae521queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}+3upersist_js_state·has_pluto_hook_features§cell_id$4a699a86-e664-4049-8421-6b39a07ae521depends_on_disabled_cells§runtimerxpublished_object_keysdepends_on_skipped_cells§errored$8bbddac3-d8a1-4787-bccf-02b7f4e5f055queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}*@ persist_js_state·has_pluto_hook_features§cell_id$8bbddac3-d8a1-4787-bccf-02b7f4e5f055depends_on_disabled_cells§runtime@ɵpublished_object_keysdepends_on_skipped_cells§errored$63f66b98-ded4-46dd-b42a-891989a39ea7queued¤logsrunning¦outputbodyٯ

Warning:

Fill in your name and student ID above.

mimetext/htmlrootassigneelast_run_timestampA}+3Apersist_js_state·has_pluto_hook_features§cell_id$63f66b98-ded4-46dd-b42a-891989a39ea7depends_on_disabled_cells§runtimeֵpublished_object_keysdepends_on_skipped_cells§errored$a727a09c-7744-4f8b-a7c3-9f157e37ea26queued¤logsrunning¦outputbodyY

Fill in your result above.

mimetext/htmlrootassigneelast_run_timestampA}+4&Ȱpersist_js_state·has_pluto_hook_features§cell_id$a727a09c-7744-4f8b-a7c3-9f157e37ea26depends_on_disabled_cells§runtime_published_object_keysdepends_on_skipped_cells§errored$48e39a6f-249c-4ba1-a32e-061c08eba644queued¤logsrunning¦outputbody

During the same calibration run, the beacon also logged whether each transmitted echo pulse was successfully received or lost to background noise. These outcomes are stored in echo_successes.

mimetext/htmlrootassigneelast_run_timestampA}+3cڰpersist_js_state÷has_pluto_hook_features§cell_id$48e39a6f-249c-4ba1-a32e-061c08eba644depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$021b20bc-d0ec-48d8-af25-26a29f9b4de4queued¤logsrunning¦outputbody"Pietje Puk"mimetext/plainrootassigneenamelast_run_timestampA}+3'persist_js_state·has_pluto_hook_features§cell_id$021b20bc-d0ec-48d8-af25-26a29f9b4de4depends_on_disabled_cells§runtime=published_object_keysdepends_on_skipped_cells§errored$b56a926e-7e4d-4d44-b399-bb042de8c071queued¤logsrunning¦outputbodyم

The x-coordinate uncertainty of pos_2d compared to x_pos_combined is...

mimetext/htmlrootassigneecomparison_commentlast_run_timestampA}+45persist_js_state·has_pluto_hook_features§cell_id$b56a926e-7e4d-4d44-b399-bb042de8c071depends_on_disabled_cells§runtime µpublished_object_keysdepends_on_skipped_cells§errored$341618ea-677b-499e-b518-8a577e997e97queued¤logsrunning¦outputbody'N mimeimage/svg+xmlrootassigneelast_run_timestampA}+8Xİpersist_js_state·has_pluto_hook_features§cell_id$341618ea-677b-499e-b518-8a577e997e97depends_on_disabled_cells§runtimedKpublished_object_keysdepends_on_skipped_cells§errored$2064d975-d9ad-4ddd-9d81-87f64363f998queued¤logsrunning¦outputbodyA

I chose this prior because...

mimetext/htmlrootassigneeprior_choice_motivationlast_run_timestampA}+40upersist_js_state·has_pluto_hook_features§cell_id$2064d975-d9ad-4ddd-9d81-87f64363f998depends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$e4f3e468-fec8-4c3f-941d-0003e24a20f6queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}*persist_js_state·has_pluto_hook_features§cell_id$e4f3e468-fec8-4c3f-941d-0003e24a20f6depends_on_disabled_cells§runtimeIxpublished_object_keysdepends_on_skipped_cells§errored$8555f14e-df09-4f11-82c0-cd5935d66418queued¤logsrunning¦outputbodyp

This assignment took me ... minutes.

I enjoyed this assignment? (yes / no / neutral) ...

I found the assignment clear? (yes / no / neutral) ...

Did I use LLM tools (ChatGPT, Claude, Copilot, etc.) to help with this assignment? (yes / no) ... Was it helpful? ...

mimetext/htmlrootassigneefeedbacklast_run_timestampA}+49Xpersist_js_state·has_pluto_hook_features§cell_id$8555f14e-df09-4f11-82c0-cd5935d66418depends_on_disabled_cells§runtime5Tpublished_object_keysdepends_on_skipped_cells§errored$49e485c8-4b63-4fde-a7b6-6dc919e9bc38queued¤logsrunning¦outputbody
mimetext/htmlrootassigneelast_run_timestampA}+3d.persist_js_state÷has_pluto_hook_features§cell_id$49e485c8-4b63-4fde-a7b6-6dc919e9bc38depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$7dc3b839-c454-486f-b8f7-747332a7e45cqueued¤logsrunning¦outputbodyٯ

Warning:

Fill in your name and student ID above.

mimetext/htmlrootassigneelast_run_timestampA}+4=Lpersist_js_state·has_pluto_hook_features§cell_id$7dc3b839-c454-486f-b8f7-747332a7e45cdepends_on_disabled_cells§runtime,յpublished_object_keysdepends_on_skipped_cells§errored$3dac2b2c-494b-498a-a74b-a11349af54c3queued¤logsrunning¦outputbodyf

Feedback

Please fill in the feedback below.

mimetext/htmlrootassigneelast_run_timestampA}+3eKpersist_js_state÷has_pluto_hook_features§cell_id$3dac2b2c-494b-498a-a74b-a11349af54c3depends_on_disabled_cells§runtime=published_object_keysdepends_on_skipped_cells§errored$103f53b2-be86-48e6-b380-fbc138c2cd33queued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}**cpersist_js_state·has_pluto_hook_features§cell_id$103f53b2-be86-48e6-b380-fbc138c2cd33depends_on_disabled_cells§runtimeFŵpublished_object_keysdepends_on_skipped_cells§errored$69096420-5636-48e4-8380-24fe9aafab37queued¤logsrunning¦outputbody

Introduction: robot localization

An autonomous logistics robot is navigating a large warehouse (40 m wide × 30 m tall). Because GPS signals are unreliable indoors, the robot uses ultrasonic beacons mounted at fixed, known positions on the walls.

Each beacon emits a short sound pulse and measures the time until it detects the returning echo. From this time-of-flight measurement, it computes a distance estimate to the robot.

Warehouse

The warehouse has two types of sensors:

Each sensor on the west wall measures the horizontal distance to the robot, giving a direct (noisy) estimate of the robot's x-coordinate. Each sensor on the east wall measures the distance from the far side, which after correction also gives an estimate of the robot's x-coordinate.

In this assignment you will:

  1. Characterize the sensor noise and reliability using calibration data.

  2. Estimate the x-coordinate of the robot from multiple independent sensor readings.

  3. Estimate the 2D position of the robot using a multivariate probabilistic model.

mimetext/htmlrootassigneelast_run_timestampA}+3/persist_js_state÷has_pluto_hook_features§cell_id$69096420-5636-48e4-8380-24fe9aafab37depends_on_disabled_cells§runtimehwpublished_object_keysdepends_on_skipped_cells§errored$b7aea8f0-a5ac-487f-a91b-372812c5353bqueued¤logsrunning¦outputbody?

The combined estimate is...

mimetext/htmlrootassigneefusion_commentlast_run_timestampA}+43persist_js_state·has_pluto_hook_features§cell_id$b7aea8f0-a5ac-487f-a91b-372812c5353bdepends_on_disabled_cells§runtime8ĵpublished_object_keysdepends_on_skipped_cells§errored$f6617439-fb86-4425-925a-6e705a78a2b3queued¤logsrunning¦outputbody+Distributions.Beta{Float64}(α=1.0, β=1.0)mimetext/plainrootassigneefound_reliabilitylast_run_timestampA}+4!Kpersist_js_state·has_pluto_hook_features§cell_id$f6617439-fb86-4425-925a-6e705a78a2b3depends_on_disabled_cells§runtime>fpublished_object_keysdepends_on_skipped_cells§errored$e47f428e-cc70-4a89-82a4-3e4dc563129aqueued¤logsrunning¦outputbodyW

Part 1: Sensor Calibration

Before deploying the sensors, we run a calibration test. The robot is placed at a known position, and a single Type A sensor repeatedly measures the distance to a reflector at a known distance of calib_distance = 8.0 m.

The calibration residuals (measured distance minus known distance) are stored in calib_residuals. A well-calibrated sensor should have residuals centred at zero. In practice, manufacturing tolerances and mounting geometry can introduce a small systematic bias $\delta_A$. We also want to know the spread of the measurements, i.e., the systematic variance $\sigma^2_A$.

mimetext/htmlrootassigneelast_run_timestampA}+4Ҩpersist_js_state·has_pluto_hook_features§cell_id$e47f428e-cc70-4a89-82a4-3e4dc563129adepends_on_disabled_cells§runtime (published_object_keysdepends_on_skipped_cells§errored$41c2a20b-a664-492c-8821-682ecd34647cqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}*Ppersist_js_state·has_pluto_hook_features§cell_id$41c2a20b-a664-492c-8821-682ecd34647cdepends_on_disabled_cells§runtimeI

Hint

The combined posterior is proportional to the product of the individual posteriors.

mimetext/htmlrootassigneelast_run_timestampA}+43ְpersist_js_state·has_pluto_hook_features§cell_id$825db4bb-77aa-4686-82a7-0da72589b925depends_on_disabled_cells§runtime6published_object_keysdepends_on_skipped_cells§errored$75fc1627-1e01-433f-9a44-791d982d4944queued¤logsrunning¦outputbodyz

Data overview

The following data are available to you:

mimetext/htmlrootassigneelast_run_timestampA}+4]Ѱpersist_js_state·has_pluto_hook_features§cell_id$75fc1627-1e01-433f-9a44-791d982d4944depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$abc102e0-5e58-4ac1-bbc8-b28dce742ae7queued¤logsrunning¦outputbody123456mimetext/plainrootassigneestudent_idlast_run_timestampA}+3Rpersist_js_state·has_pluto_hook_features§cell_id$abc102e0-5e58-4ac1-bbc8-b28dce742ae7depends_on_disabled_cells§runtime6published_object_keysdepends_on_skipped_cells§errored$2378b595-fa29-4a32-b428-1a5ecf4b05d7queued¤logsrunning¦outputbodyْ

Appendix

The following cells are not important for the understanding of this assigment.

mimetext/htmlrootassigneelast_run_timestampA}+3gXpersist_js_state÷has_pluto_hook_features§cell_id$2378b595-fa29-4a32-b428-1a5ecf4b05d7depends_on_disabled_cells§runtime@published_object_keysdepends_on_skipped_cells§errored$705b06c6-600a-411a-b397-726e4d5acf3aqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}+4] persist_js_state·has_pluto_hook_features§cell_id$705b06c6-600a-411a-b397-726e4d5acf3adepends_on_disabled_cells§runtimeus*-published_object_keysdepends_on_skipped_cells§errored$3a9a632a-a3d5-4093-b9ed-ae7f6d90b46fqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}+1ɽpersist_js_state·has_pluto_hook_features§cell_id$3a9a632a-a3d5-4093-b9ed-ae7f6d90b46fdepends_on_disabled_cells§runtime&published_object_keysdepends_on_skipped_cells§errored$6a26d308-3667-49a8-9f4a-0e6360230760queued¤logsrunning¦outputbodyL

Looking at the histogram, I find that...

mimetext/htmlrootassigneecalib_histogram_commentlast_run_timestampA}+3qpersist_js_state·has_pluto_hook_features§cell_id$6a26d308-3667-49a8-9f4a-0e6360230760depends_on_disabled_cells§runtimeGpublished_object_keysdepends_on_skipped_cells§errored$f8c27934-94a2-4817-aaca-ab818a3e0273queued¤logsrunning¦outputbody
mimetext/htmlrootassigneelast_run_timestampA}+3epersist_js_state÷has_pluto_hook_features§cell_id$f8c27934-94a2-4817-aaca-ab818a3e0273depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$044f3410-2b9f-11f1-2fb2-ddeeb7049f22queued¤logsrunning¦outputbodyResit Assignmentmimetext/htmlrootassigneelast_run_timestampA}+3persist_js_state·has_pluto_hook_features§cell_id$044f3410-2b9f-11f1-2fb2-ddeeb7049f22depends_on_disabled_cells§runtime*}published_object_keysdepends_on_skipped_cells§errored$73b34659-be3d-4184-8fa5-adba70a7b2cdqueued¤logsrunning¦outputbodymimetext/plainrootassigneelast_run_timestampA}+4>|persist_js_state·has_pluto_hook_features§cell_id$73b34659-be3d-4184-8fa5-adba70a7b2cddepends_on_disabled_cells§runtime-ֵpublished_object_keysdepends_on_skipped_cells§errored$7f22dadc-39b5-417d-b29a-c91881a23097queued¤logsrunning¦outputbodyP mimetext/htmlrootassigneelast_run_timestampA}+3ฑpersist_js_state·has_pluto_hook_features§cell_id$7f22dadc-39b5-417d-b29a-c91881a23097depends_on_disabled_cells§runtime6ڵpublished_object_keysdepends_on_skipped_cells§errored$b90a0f2a-1117-4b71-a717-d711f5ea2223queued¤logsrunning¦outputbody

Exercise: 2D Localization

mimetext/htmlrootassigneelast_run_timestampA}+45{persist_js_state·has_pluto_hook_features§cell_id$b90a0f2a-1117-4b71-a717-d711f5ea2223depends_on_disabled_cells§runtime published_object_keysdepends_on_skipped_cells§errored$66deb52f-ee85-48d6-a56e-f6f43111230fqueued¤logsrunning¦outputbody

The Type A sensors alone give a good estimate of x, but we also have readings from the Type B sensors. By combining both, we can improve our estimate further.

  • [1 point] Infer a posterior distribution over x using the Type B sensor ($\sigma^2_B =$ 0.25 m) observations as well (store as x_pos_from_B).

  • [2 point] Combine x_pos_from_A and x_pos_from_B into a single improved estimate using Bayes' rule. Store the combined result as x_pos_combined.

  • [2 point] Plot the three distributions (x_pos_from_A, x_pos_from_B, x_pos_combined). What can you say about the combined result?

mimetext/htmlrootassigneelast_run_timestampA}+7persist_js_state·has_pluto_hook_features§cell_id$66deb52f-ee85-48d6-a56e-f6f43111230fdepends_on_disabled_cells§runtime]published_object_keysdepends_on_skipped_cells§errored$3d29e63b-8478-40cb-be8e-0516cfc59e0dqueued¤logsrunning¦outputbodyv
  • [1 point] Specify a probabilistic model for calib_residuals that includes $\delta_A$ and $\sigma^2_A$.

  • [2 points] Infer a posterior distribution for the sensor bias $\delta_A$ and variance $\sigma^2_A$, and store your result as found_bias_distribution and found_variance_distribution.

  • [1 point] Explain how you chose your prior distribution.

mimetext/htmlrootassigneelast_run_timestampA}+3cpersist_js_state÷has_pluto_hook_features§cell_id$3d29e63b-8478-40cb-be8e-0516cfc59e0ddepends_on_disabled_cells§runtimePxƵpublished_object_keysdepends_on_skipped_cells§errored$ef5c9636-42a4-49f8-8c66-68a590914f12queued¤logsrunning¦outputbody mimeimage/svg+xmlrootassigneelast_run_timestampA}+8persist_js_state·has_pluto_hook_features§cell_id$ef5c9636-42a4-49f8-8c66-68a590914f12depends_on_disabled_cells§runtime*published_object_keysdepends_on_skipped_cells§errored$98d51c6e-b70d-4874-84c9-007a51ae389dqueued¤logsrunning¦outputbody

Exercise: Sensor Noise Model

  • [1 point] Plot a histogram of calib_residuals. What can you say about the shape of the distribution?

mimetext/htmlrootassigneelast_run_timestampA}+37persist_js_state·has_pluto_hook_features§cell_id$98d51c6e-b70d-4874-84c9-007a51ae389ddepends_on_disabled_cells§runtimeVpublished_object_keysdepends_on_skipped_cells§errored$dd51677f-3a0c-4fa6-b896-174915fe7417queued¤logsrunning¦outputbodyl

Loading?

Note: This notebook will take a couple of minutes to start, because Julia is downloading and precompiling the packages that we use in this notebook (Plots, RxInfer, Distributions, BmlipTeachingTools).

You can check the progress in the "Status" tab in the bottom right.

This package installation and precompilation will happen only once. Afterwards, this notebook (and future notebooks that use the same package versions) will launch much more quickly.

mimetext/htmlrootassigneelast_run_timestampA}+37Hpersist_js_state÷has_pluto_hook_features§cell_id$dd51677f-3a0c-4fa6-b896-174915fe7417depends_on_disabled_cells§runtime

Part 3: 2D Position Estimation

So far, we have only estimated the robot's x-coordinate. We now also want to know its y-coordinate to fully localise the robot in the warehouse.

Suppose we have 2D measurements from a separate positioning subsystem. Each measurement is a 2-element vector $[x, y]$ with isotropic Gaussian noise:

$$z[i] \sim \mathcal{N}\!\left(\boldsymbol{\mu_z},\; \Lambda_z^{-1} \right)$$

mimetext/htmlrootassigneelast_run_timestampA}+3dWpersist_js_state÷has_pluto_hook_features§cell_id$744d90e7-397e-45d5-ab11-fa1d5c8f9c2adepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$9d14fd1c-e704-4858-9842-fe088f18ec9cqueued¤logsrunning¦outputbodys

Fill in your result above to see the estimated bias.

mimetext/htmlrootassigneelast_run_timestampA}+4 ipersist_js_state·has_pluto_hook_features§cell_id$9d14fd1c-e704-4858-9842-fe088f18ec9cdepends_on_disabled_cells§runtimepublished_object_keysdepends_on_skipped_cells§errored$bb3362b6-6aa0-4796-b3b1-0385724feaddqueued¤logsrunning¦outputbody, mimeimage/svg+xmlrootassigneelast_run_timestampA}+7Gpersist_js_state·has_pluto_hook_features§cell_id$bb3362b6-6aa0-4796-b3b1-0385724feadddepends_on_disabled_cells§runtime lpublished_object_keysdepends_on_skipped_cells§errored$1a940dbb-e1de-4c8f-8cb6-7d0b87f98b36queued¤logsrunning¦outputbody

Exercise: Estimating x from Type A Sensors

mimetext/htmlrootassigneelast_run_timestampA}+40=ްpersist_js_state·has_pluto_hook_features§cell_id$1a940dbb-e1de-4c8f-8cb6-7d0b87f98b36depends_on_disabled_cells§runtime(0published_object_keysdepends_on_skipped_cells§errored±cell_dependencies2$b185e8b7-4914-4f78-9f19-690c2a412ed4precedence_heuristic cell_id$b185e8b7-4914-4f78-9f19-690c2a412ed4downstream_cells_mapupstream_cells_map@md_strgetindex$e55511e0-d714-4d37-91e9-0e1aa932541fprecedence_heuristic cell_id$e55511e0-d714-4d37-91e9-0e1aa932541fdownstream_cells_mapupstream_cells_mapexercise_statement$3f54c54b-7f29-44f8-b409-06e43e5f7d78precedence_heuristic cell_id$3f54c54b-7f29-44f8-b409-06e43e5f7d78downstream_cells_mapupstream_cells_mapexercise_statement$02ee0c67-c31e-4db7-92a7-41aafa829d13precedence_heuristic cell_id$02ee0c67-c31e-4db7-92a7-41aafa829d13downstream_cells_mapupstream_cells_map@md_strlengthx_obs_B$705b06c6-600a-411a-b397-726e4d5acf3ax_obs_A$705b06c6-600a-411a-b397-726e4d5acf3agetindex$c4aa8122-4ada-4fb6-af5d-286992e42820precedence_heuristic cell_id$c4aa8122-4ada-4fb6-af5d-286992e42820downstream_cells_mapshow_warehouse$341618ea-677b-499e-b518-8a577e997e97upstream_cells_maplengthplotsensor_pos_B$705b06c6-600a-411a-b397-726e4d5acf3azerosplot!fillsensor_pos_A$705b06c6-600a-411a-b397-726e4d5acf3ascatter!$767447b1-080b-411b-83d5-d0cb75e290d4precedence_heuristic cell_id$767447b1-080b-411b-83d5-d0cb75e290d4downstream_cells_mapupstream_cells_map$daac2bd0-cfd2-45b9-8675-38b0e5484771precedence_heuristic cell_id$daac2bd0-cfd2-45b9-8675-38b0e5484771downstream_cells_mapupstream_cells_map$ccf48c15-7aad-445e-86ef-b7c5b02abfdeprecedence_heuristic cell_id$ccf48c15-7aad-445e-86ef-b7c5b02abfdedownstream_cells_mapreliability_prior_commentupstream_cells_map@md_strgetindex$7dcd02eb-7d02-4e2b-8610-936b0b19307eprecedence_heuristic cell_id$7dcd02eb-7d02-4e2b-8610-936b0b19307edownstream_cells_mapupstream_cells_mapNormalBase.getindex@md_strfound_bias_distribution$4a699a86-e664-4049-8421-6b39a07ae521Distribution!typeof@isdefinedUnivariatevar_not_definedAnyisaBasecorrectkeep_working==meanroundstd$4a699a86-e664-4049-8421-6b39a07ae521precedence_heuristic cell_id$4a699a86-e664-4049-8421-6b39a07ae521downstream_cells_mapfound_bias_distribution$7dcd02eb-7d02-4e2b-8610-936b0b19307efound_variance_distribution$9d14fd1c-e704-4858-9842-fe088f18ec9cupstream_cells_map/InverseGammaNormal$8bbddac3-d8a1-4787-bccf-02b7f4e5f055precedence_heuristic cell_id$8bbddac3-d8a1-4787-bccf-02b7f4e5f055downstream_cells_mapupstream_cells_map$63f66b98-ded4-46dd-b42a-891989a39ea7precedence_heuristic cell_id$63f66b98-ded4-46dd-b42a-891989a39ea7downstream_cells_map__name_id_check$7dc3b839-c454-486f-b8f7-747332a7e45cupstream_cells_map!@isdefinedStringvar_not_definedstudent_id$abc102e0-5e58-4ac1-bbc8-b28dce742ae7Integerwarning_boxname$021b20bc-d0ec-48d8-af25-26a29f9b4de4isacorrectdanger==$a727a09c-7744-4f8b-a7c3-9f157e37ea26precedence_heuristic cell_id$a727a09c-7744-4f8b-a7c3-9f157e37ea26downstream_cells_mapupstream_cells_map@md_strBase.getindexDistribution!typeof@isdefinedUnivariatevar_not_definedAnyisaBetaBasecorrectkeep_workingfound_reliability$f6617439-fb86-4425-925a-6e705a78a2b3==meanroundstd$48e39a6f-249c-4ba1-a32e-061c08eba644precedence_heuristic cell_id$48e39a6f-249c-4ba1-a32e-061c08eba644downstream_cells_mapupstream_cells_map@md_strgetindex$021b20bc-d0ec-48d8-af25-26a29f9b4de4precedence_heuristic cell_id$021b20bc-d0ec-48d8-af25-26a29f9b4de4downstream_cells_mapname$63f66b98-ded4-46dd-b42a-891989a39ea7upstream_cells_map$b56a926e-7e4d-4d44-b399-bb042de8c071precedence_heuristic cell_id$b56a926e-7e4d-4d44-b399-bb042de8c071downstream_cells_mapcomparison_commentupstream_cells_map@md_strgetindex$341618ea-677b-499e-b518-8a577e997e97precedence_heuristic cell_id$341618ea-677b-499e-b518-8a577e997e97downstream_cells_mapupstream_cells_mapshow_warehouse$c4aa8122-4ada-4fb6-af5d-286992e42820$2064d975-d9ad-4ddd-9d81-87f64363f998precedence_heuristic cell_id$2064d975-d9ad-4ddd-9d81-87f64363f998downstream_cells_mapprior_choice_motivationupstream_cells_map@md_strgetindex$e4f3e468-fec8-4c3f-941d-0003e24a20f6precedence_heuristic cell_id$e4f3e468-fec8-4c3f-941d-0003e24a20f6downstream_cells_mapupstream_cells_map$8555f14e-df09-4f11-82c0-cd5935d66418precedence_heuristic cell_id$8555f14e-df09-4f11-82c0-cd5935d66418downstream_cells_mapfeedbackupstream_cells_map@md_strgetindex$49e485c8-4b63-4fde-a7b6-6dc919e9bc38precedence_heuristic cell_id$49e485c8-4b63-4fde-a7b6-6dc919e9bc38downstream_cells_mapupstream_cells_map@md_strgetindex$7dc3b839-c454-486f-b8f7-747332a7e45cprecedence_heuristic cell_id$7dc3b839-c454-486f-b8f7-747332a7e45cdownstream_cells_mapupstream_cells_map__name_id_check$63f66b98-ded4-46dd-b42a-891989a39ea7$3dac2b2c-494b-498a-a74b-a11349af54c3precedence_heuristic cell_id$3dac2b2c-494b-498a-a74b-a11349af54c3downstream_cells_mapupstream_cells_map@md_strgetindex$103f53b2-be86-48e6-b380-fbc138c2cd33precedence_heuristic cell_id$103f53b2-be86-48e6-b380-fbc138c2cd33downstream_cells_mapupstream_cells_map$69096420-5636-48e4-8380-24fe9aafab37precedence_heuristic cell_id$69096420-5636-48e4-8380-24fe9aafab37downstream_cells_mapupstream_cells_map@md_strgetindex$b7aea8f0-a5ac-487f-a91b-372812c5353bprecedence_heuristic cell_id$b7aea8f0-a5ac-487f-a91b-372812c5353bdownstream_cells_mapfusion_commentupstream_cells_map@md_strgetindex$f6617439-fb86-4425-925a-6e705a78a2b3precedence_heuristic cell_id$f6617439-fb86-4425-925a-6e705a78a2b3downstream_cells_mapfound_reliability$a727a09c-7744-4f8b-a7c3-9f157e37ea26upstream_cells_mapBeta$e47f428e-cc70-4a89-82a4-3e4dc563129aprecedence_heuristic cell_id$e47f428e-cc70-4a89-82a4-3e4dc563129adownstream_cells_mapupstream_cells_map@md_strcalib_distance$705b06c6-600a-411a-b397-726e4d5acf3agetindex$41c2a20b-a664-492c-8821-682ecd34647cprecedence_heuristic cell_id$41c2a20b-a664-492c-8821-682ecd34647cdownstream_cells_mapupstream_cells_map$825db4bb-77aa-4686-82a7-0da72589b925precedence_heuristic cell_id$825db4bb-77aa-4686-82a7-0da72589b925downstream_cells_mapupstream_cells_map@md_strhintgetindex$75fc1627-1e01-433f-9a44-791d982d4944precedence_heuristic cell_id$75fc1627-1e01-433f-9a44-791d982d4944downstream_cells_mapupstream_cells_map@md_strlengthcalib_distance$705b06c6-600a-411a-b397-726e4d5acf3apos_obs$705b06c6-600a-411a-b397-726e4d5acf3acalib_residuals$705b06c6-600a-411a-b397-726e4d5acf3ax_obs_B$705b06c6-600a-411a-b397-726e4d5acf3ax_obs_A$705b06c6-600a-411a-b397-726e4d5acf3agetindex$abc102e0-5e58-4ac1-bbc8-b28dce742ae7precedence_heuristic cell_id$abc102e0-5e58-4ac1-bbc8-b28dce742ae7downstream_cells_mapstudent_id$63f66b98-ded4-46dd-b42a-891989a39ea7upstream_cells_map$2378b595-fa29-4a32-b428-1a5ecf4b05d7precedence_heuristic cell_id$2378b595-fa29-4a32-b428-1a5ecf4b05d7downstream_cells_mapupstream_cells_map@md_strgetindex$705b06c6-600a-411a-b397-726e4d5acf3aprecedence_heuristic cell_id$705b06c6-600a-411a-b397-726e4d5acf3adownstream_cells_mapΛ_zsigma_B$66deb52f-ee85-48d6-a56e-f6f43111230fpos_obs$75fc1627-1e01-433f-9a44-791d982d4944$ef5c9636-42a4-49f8-8c66-68a590914f12calib_residuals$75fc1627-1e01-433f-9a44-791d982d4944rng_calibsensor_pos_B$c4aa8122-4ada-4fb6-af5d-286992e42820x_obs_B$75fc1627-1e01-433f-9a44-791d982d4944$02ee0c67-c31e-4db7-92a7-41aafa829d13$bb3362b6-6aa0-4796-b3b1-0385724feaddsigma_zx_obs_A$75fc1627-1e01-433f-9a44-791d982d4944$02ee0c67-c31e-4db7-92a7-41aafa829d13$bb3362b6-6aa0-4796-b3b1-0385724feaddcalib_distance$75fc1627-1e01-433f-9a44-791d982d4944$e47f428e-cc70-4a89-82a4-3e4dc563129arng_echoecho_successescalib_measurementsrng_2dsensor_pos_A$c4aa8122-4ada-4fb6-af5d-286992e42820sigma_Arng_xsecret_true_pupstream_cells_mapinvrandn:secret_true_y$73b34659-be3d-4184-8fa5-adba70a7b2cdBernoulliranddiageyesecret_true_x$73b34659-be3d-4184-8fa5-adba70a7b2cd-+*secret_bias$73b34659-be3d-4184-8fa5-adba70a7b2cdStableRNG$3a9a632a-a3d5-4093-b9ed-ae7f6d90b46fprecedence_heuristiccell_id$3a9a632a-a3d5-4093-b9ed-ae7f6d90b46fdownstream_cells_mapLinearAlgebraDistributionsStableRNGsPlotsBmlipTeachingToolsRxInferMarkdownStatsPlotsupstream_cells_mapdefault$6a26d308-3667-49a8-9f4a-0e6360230760precedence_heuristic cell_id$6a26d308-3667-49a8-9f4a-0e6360230760downstream_cells_mapcalib_histogram_commentupstream_cells_map@md_strgetindex$f8c27934-94a2-4817-aaca-ab818a3e0273precedence_heuristic cell_id$f8c27934-94a2-4817-aaca-ab818a3e0273downstream_cells_mapupstream_cells_map@md_strgetindex$044f3410-2b9f-11f1-2fb2-ddeeb7049f22precedence_heuristic cell_id$044f3410-2b9f-11f1-2fb2-ddeeb7049f22downstream_cells_mapupstream_cells_maptitle$73b34659-be3d-4184-8fa5-adba70a7b2cdprecedence_heuristic cell_id$73b34659-be3d-4184-8fa5-adba70a7b2cddownstream_cells_mapsecret_true_x$705b06c6-600a-411a-b397-726e4d5acf3asecret_true_y$705b06c6-600a-411a-b397-726e4d5acf3asecret_bias$705b06c6-600a-411a-b397-726e4d5acf3aupstream_cells_map$7f22dadc-39b5-417d-b29a-c91881a23097precedence_heuristic cell_id$7f22dadc-39b5-417d-b29a-c91881a23097downstream_cells_mapupstream_cells_mapTableOfContents$b90a0f2a-1117-4b71-a717-d711f5ea2223precedence_heuristic cell_id$b90a0f2a-1117-4b71-a717-d711f5ea2223downstream_cells_mapupstream_cells_mapexercise_statement$66deb52f-ee85-48d6-a56e-f6f43111230fprecedence_heuristic cell_id$66deb52f-ee85-48d6-a56e-f6f43111230fdownstream_cells_mapupstream_cells_map@md_strsigma_B$705b06c6-600a-411a-b397-726e4d5acf3a^getindex$3d29e63b-8478-40cb-be8e-0516cfc59e0dprecedence_heuristic cell_id$3d29e63b-8478-40cb-be8e-0516cfc59e0ddownstream_cells_mapupstream_cells_map@md_strgetindex$ef5c9636-42a4-49f8-8c66-68a590914f12precedence_heuristic cell_id$ef5c9636-42a4-49f8-8c66-68a590914f12downstream_cells_mapupstream_cells_mappos_obs$705b06c6-600a-411a-b397-726e4d5acf3ascatterfirstlast$98d51c6e-b70d-4874-84c9-007a51ae389dprecedence_heuristic cell_id$98d51c6e-b70d-4874-84c9-007a51ae389ddownstream_cells_mapupstream_cells_map@md_strexercise_statementgetindex$dd51677f-3a0c-4fa6-b896-174915fe7417precedence_heuristic cell_id$dd51677f-3a0c-4fa6-b896-174915fe7417downstream_cells_mapupstream_cells_map@md_strgetindex$744d90e7-397e-45d5-ab11-fa1d5c8f9c2aprecedence_heuristic cell_id$744d90e7-397e-45d5-ab11-fa1d5c8f9c2adownstream_cells_mapupstream_cells_map@md_strgetindex$9d14fd1c-e704-4858-9842-fe088f18ec9cprecedence_heuristic cell_id$9d14fd1c-e704-4858-9842-fe088f18ec9cdownstream_cells_mapupstream_cells_map@md_strBase.getindex!modetypeofInverseGammaUnivariatefound_variance_distribution$4a699a86-e664-4049-8421-6b39a07ae521var_not_definedAny@isdefinedisaBasecorrectkeep_working/==roundDistributionstd$bb3362b6-6aa0-4796-b3b1-0385724feaddprecedence_heuristic cell_id$bb3362b6-6aa0-4796-b3b1-0385724feadddownstream_cells_mapupstream_cells_mapx_obs_A$705b06c6-600a-411a-b397-726e4d5acf3a-scatterx_obs_B$705b06c6-600a-411a-b397-726e4d5acf3a+hline!meanscatter!$1a940dbb-e1de-4c8f-8cb6-7d0b87f98b36precedence_heuristic cell_id$1a940dbb-e1de-4c8f-8cb6-7d0b87f98b36downstream_cells_mapupstream_cells_mapexercise_statementcell_execution_order2$3a9a632a-a3d5-4093-b9ed-ae7f6d90b46f$dd51677f-3a0c-4fa6-b896-174915fe7417$044f3410-2b9f-11f1-2fb2-ddeeb7049f22$021b20bc-d0ec-48d8-af25-26a29f9b4de4$abc102e0-5e58-4ac1-bbc8-b28dce742ae7$63f66b98-ded4-46dd-b42a-891989a39ea7$7f22dadc-39b5-417d-b29a-c91881a23097$69096420-5636-48e4-8380-24fe9aafab37$98d51c6e-b70d-4874-84c9-007a51ae389d$103f53b2-be86-48e6-b380-fbc138c2cd33$6a26d308-3667-49a8-9f4a-0e6360230760$3d29e63b-8478-40cb-be8e-0516cfc59e0d$8bbddac3-d8a1-4787-bccf-02b7f4e5f055$4a699a86-e664-4049-8421-6b39a07ae521$7dcd02eb-7d02-4e2b-8610-936b0b19307e$9d14fd1c-e704-4858-9842-fe088f18ec9c$e55511e0-d714-4d37-91e9-0e1aa932541f$48e39a6f-249c-4ba1-a32e-061c08eba644$41c2a20b-a664-492c-8821-682ecd34647c$f6617439-fb86-4425-925a-6e705a78a2b3$a727a09c-7744-4f8b-a7c3-9f157e37ea26$ccf48c15-7aad-445e-86ef-b7c5b02abfde$1a940dbb-e1de-4c8f-8cb6-7d0b87f98b36$49e485c8-4b63-4fde-a7b6-6dc919e9bc38$767447b1-080b-411b-83d5-d0cb75e290d4$2064d975-d9ad-4ddd-9d81-87f64363f998$3f54c54b-7f29-44f8-b409-06e43e5f7d78$825db4bb-77aa-4686-82a7-0da72589b925$daac2bd0-cfd2-45b9-8675-38b0e5484771$b7aea8f0-a5ac-487f-a91b-372812c5353b$744d90e7-397e-45d5-ab11-fa1d5c8f9c2a$b90a0f2a-1117-4b71-a717-d711f5ea2223$f8c27934-94a2-4817-aaca-ab818a3e0273$e4f3e468-fec8-4c3f-941d-0003e24a20f6$b56a926e-7e4d-4d44-b399-bb042de8c071$3dac2b2c-494b-498a-a74b-a11349af54c3$8555f14e-df09-4f11-82c0-cd5935d66418$b185e8b7-4914-4f78-9f19-690c2a412ed4$7dc3b839-c454-486f-b8f7-747332a7e45c$2378b595-fa29-4a32-b428-1a5ecf4b05d7$73b34659-be3d-4184-8fa5-adba70a7b2cd$705b06c6-600a-411a-b397-726e4d5acf3a$75fc1627-1e01-433f-9a44-791d982d4944$e47f428e-cc70-4a89-82a4-3e4dc563129a$02ee0c67-c31e-4db7-92a7-41aafa829d13$bb3362b6-6aa0-4796-b3b1-0385724feadd$66deb52f-ee85-48d6-a56e-f6f43111230f$ef5c9636-42a4-49f8-8c66-68a590914f12$c4aa8122-4ada-4fb6-af5d-286992e42820$341618ea-677b-499e-b518-8a577e997e97last_hot_reload_timeshortpathResit - robot localization.jlprocess_statusreadypathI/home/runner/work/course/course/assignments/Resit - robot localization.jlpluto_versionv0.20.19last_save_timeA}*~9cell_order2$dd51677f-3a0c-4fa6-b896-174915fe7417$044f3410-2b9f-11f1-2fb2-ddeeb7049f22$021b20bc-d0ec-48d8-af25-26a29f9b4de4$abc102e0-5e58-4ac1-bbc8-b28dce742ae7$63f66b98-ded4-46dd-b42a-891989a39ea7$7f22dadc-39b5-417d-b29a-c91881a23097$69096420-5636-48e4-8380-24fe9aafab37$341618ea-677b-499e-b518-8a577e997e97$75fc1627-1e01-433f-9a44-791d982d4944$e47f428e-cc70-4a89-82a4-3e4dc563129a$98d51c6e-b70d-4874-84c9-007a51ae389d$103f53b2-be86-48e6-b380-fbc138c2cd33$6a26d308-3667-49a8-9f4a-0e6360230760$3d29e63b-8478-40cb-be8e-0516cfc59e0d$8bbddac3-d8a1-4787-bccf-02b7f4e5f055$4a699a86-e664-4049-8421-6b39a07ae521$7dcd02eb-7d02-4e2b-8610-936b0b19307e$9d14fd1c-e704-4858-9842-fe088f18ec9c$e55511e0-d714-4d37-91e9-0e1aa932541f$48e39a6f-249c-4ba1-a32e-061c08eba644$41c2a20b-a664-492c-8821-682ecd34647c$f6617439-fb86-4425-925a-6e705a78a2b3$a727a09c-7744-4f8b-a7c3-9f157e37ea26$ccf48c15-7aad-445e-86ef-b7c5b02abfde$02ee0c67-c31e-4db7-92a7-41aafa829d13$bb3362b6-6aa0-4796-b3b1-0385724feadd$1a940dbb-e1de-4c8f-8cb6-7d0b87f98b36$49e485c8-4b63-4fde-a7b6-6dc919e9bc38$767447b1-080b-411b-83d5-d0cb75e290d4$2064d975-d9ad-4ddd-9d81-87f64363f998$3f54c54b-7f29-44f8-b409-06e43e5f7d78$66deb52f-ee85-48d6-a56e-f6f43111230f$825db4bb-77aa-4686-82a7-0da72589b925$daac2bd0-cfd2-45b9-8675-38b0e5484771$b7aea8f0-a5ac-487f-a91b-372812c5353b$744d90e7-397e-45d5-ab11-fa1d5c8f9c2a$ef5c9636-42a4-49f8-8c66-68a590914f12$b90a0f2a-1117-4b71-a717-d711f5ea2223$f8c27934-94a2-4817-aaca-ab818a3e0273$e4f3e468-fec8-4c3f-941d-0003e24a20f6$b56a926e-7e4d-4d44-b399-bb042de8c071$3dac2b2c-494b-498a-a74b-a11349af54c3$8555f14e-df09-4f11-82c0-cd5935d66418$b185e8b7-4914-4f78-9f19-690c2a412ed4$7dc3b839-c454-486f-b8f7-747332a7e45c$2378b595-fa29-4a32-b428-1a5ecf4b05d7$3a9a632a-a3d5-4093-b9ed-ae7f6d90b46f$73b34659-be3d-4184-8fa5-adba70a7b2cd$705b06c6-600a-411a-b397-726e4d5acf3a$c4aa8122-4ada-4fb6-af5d-286992e42820published_objectsnbpkginstall_time_nsA#^instantiatedòinstalled_versionsLinearAlgebrastdlibDistributions0.25.123BmlipTeachingTools1.3.1Plots1.41.6StableRNGs1.0.4RxInfer4.7.1MarkdownstdlibStatsPlots0.15.8terminal_outputsnbpkg_sync Resolving... === ┌ Warning: Pkg operation failed. Fixing stdlib dependencies and trying again... └ @ GracefulPkg ~/.julia/packages/GracefulPkg/xDBdf/src/apply strategies.jl:92 Resolving... ===  Project No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Project.toml`  Manifest No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Manifest.toml` Instantiating... === Precompiling... === LinearAlgebra Resolving... === ┌ Warning: Pkg operation failed. Fixing stdlib dependencies and trying again... └ @ GracefulPkg ~/.julia/packages/GracefulPkg/xDBdf/src/apply strategies.jl:92 Resolving... ===  Project No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Project.toml`  Manifest No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Manifest.toml` Instantiating... === Precompiling... === Distributions Resolving... === ┌ Warning: Pkg operation failed. Fixing stdlib dependencies and trying again... └ @ GracefulPkg ~/.julia/packages/GracefulPkg/xDBdf/src/apply strategies.jl:92 Resolving... ===  Project No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Project.toml`  Manifest No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Manifest.toml` Instantiating... === Precompiling... === StableRNGs Resolving... === ┌ Warning: Pkg operation failed. Fixing stdlib dependencies and trying again... └ @ GracefulPkg ~/.julia/packages/GracefulPkg/xDBdf/src/apply strategies.jl:92 Resolving... ===  Project No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Project.toml`  Manifest No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Manifest.toml` Instantiating... === Precompiling... === Plots Resolving... === ┌ Warning: Pkg operation failed. Fixing stdlib dependencies and trying again... └ @ GracefulPkg ~/.julia/packages/GracefulPkg/xDBdf/src/apply strategies.jl:92 Resolving... ===  Project No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Project.toml`  Manifest No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Manifest.toml` Instantiating... === Precompiling... === BmlipTeachingTools Resolving... === ┌ Warning: Pkg operation failed. Fixing stdlib dependencies and trying again... └ @ GracefulPkg ~/.julia/packages/GracefulPkg/xDBdf/src/apply strategies.jl:92 Resolving... ===  Project No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Project.toml`  Manifest No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Manifest.toml` Instantiating... === Precompiling... === RxInfer Resolving... === ┌ Warning: Pkg operation failed. Fixing stdlib dependencies and trying again... └ @ GracefulPkg ~/.julia/packages/GracefulPkg/xDBdf/src/apply strategies.jl:92 Resolving... ===  Project No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Project.toml`  Manifest No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Manifest.toml` Instantiating... === Precompiling... === Markdown Resolving... === ┌ Warning: Pkg operation failed. Fixing stdlib dependencies and trying again... └ @ GracefulPkg ~/.julia/packages/GracefulPkg/xDBdf/src/apply strategies.jl:92 Resolving... ===  Project No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Project.toml`  Manifest No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Manifest.toml` Instantiating... === Precompiling... === StatsPlots Resolving... === ┌ Warning: Pkg operation failed. Fixing stdlib dependencies and trying again... └ @ GracefulPkg ~/.julia/packages/GracefulPkg/xDBdf/src/apply strategies.jl:92 Resolving... ===  Project No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Project.toml`  Manifest No packages added to or removed from `~/.julia/scratchspaces/c3e4b0f8-55cb-11ea-2926-15256bba5781/pkg_envs/env_aszvxxnvlt/Manifest.toml` Instantiating... === Precompiling... === enabled÷restart_recommended_msgrestart_required_msgbusy_packageswaiting_for_permission,waiting_for_permission_but_probably_disabled«cell_inputs2$b185e8b7-4914-4f78-9f19-690c2a412ed4cell_id$b185e8b7-4914-4f78-9f19-690c2a412ed4codemd""" ## Submission To submit this notebook, please use the **"Export to HTML"** feature from Pluto ([documentation](https://plutojl.org/en/docs/export-html/)) to get the HTML file to submit. You can also submit a `.jl` Julia file. **PDF is not accepted.** """metadatashow_logsèdisabled®skip_as_script«code_folded$e55511e0-d714-4d37-91e9-0e1aa932541fcell_id$e55511e0-d714-4d37-91e9-0e1aa932541fcode(exercise_statement("Sensor Reliability")metadatashow_logsèdisabled®skip_as_script«code_folded$3f54c54b-7f29-44f8-b409-06e43e5f7d78cell_id$3f54c54b-7f29-44f8-b409-06e43e5f7d78code>exercise_statement("Sensor Fusion", header_level=2, big=true) metadatashow_logsèdisabled®skip_as_script«code_folded$02ee0c67-c31e-4db7-92a7-41aafa829d13cell_id$02ee0c67-c31e-4db7-92a7-41aafa829d13codemd""" # Part 2: Estimating the x-Position Now that we understand the sensor noise, we want to **estimate the robot's x-coordinate** inside the warehouse. Two independent sets of measurements are available: - `x_obs_A` — $(length(x_obs_A)) readings from Type A sensors - `x_obs_B` — $(length(x_obs_B)) readings from Type B sensors Each observation is an independent, noisy measurement of the robot's true x-coordinate. """metadatashow_logsèdisabled®skip_as_script«code_folded$c4aa8122-4ada-4fb6-af5d-286992e42820cell_id$c4aa8122-4ada-4fb6-af5d-286992e42820codeBfunction show_warehouse(; title_str="Logistics Warehouse (40 m × 30 m)") p = plot(; xlim=(-2, 42), ylim=(-2, 32), aspect_ratio=1, title=title_str, xlabel="x position (m)", ylabel="y position (m)", ) plot!(p, [0,40,40,0,0], [0,0,30,30,0]; lw=2, c=:black, label="Walls") scatter!(p, zeros(length(sensor_pos_A)), sensor_pos_A; c=:blue, marker=:ltriangle, ms=8, label="Type A sensors (west wall)") scatter!(p, fill(40.0, length(sensor_pos_B)), sensor_pos_B; c=:darkorange, marker=:rtriangle, ms=8, label="Type B sensors (east wall)") plot!(legend=:inside) p end;metadatashow_logsèdisabled®skip_as_script«code_folded$767447b1-080b-411b-83d5-d0cb75e290d4cell_id$767447b1-080b-411b-83d5-d0cb75e290d4code### YOUR CODE HEREmetadatashow_logsèdisabled®skip_as_script«code_folded$daac2bd0-cfd2-45b9-8675-38b0e5484771cell_id$daac2bd0-cfd2-45b9-8675-38b0e5484771code### YOUR CODE HEREmetadatashow_logsèdisabled®skip_as_script«code_folded$ccf48c15-7aad-445e-86ef-b7c5b02abfdecell_id$ccf48c15-7aad-445e-86ef-b7c5b02abfdecodeFreliability_prior_comment = md""" I chose this prior because... """metadatashow_logsèdisabled®skip_as_script«code_folded$7dcd02eb-7d02-4e2b-8610-936b0b19307ecell_id$7dcd02eb-7d02-4e2b-8610-936b0b19307ecodeBbegin if !@isdefined(found_bias_distribution) var_not_defined(:found_bias_distribution) elseif !(found_bias_distribution isa Distribution{Univariate, <:Any}) keep_working(md"`found_bias_distribution` should be a univariate `Distribution`.") elseif found_bias_distribution == Normal(0.0, 1.0) md"> Fill in your result above to see the estimated bias." else correct(md"You have entered a $(typeof(found_bias_distribution)). Estimated bias: mean = $(round(mean(found_bias_distribution), digits=4)) m, std = $(round(std(found_bias_distribution), digits=4)) m.") end endmetadatashow_logsèdisabled®skip_as_script«code_folded$4a699a86-e664-4049-8421-6b39a07ae521cell_id$4a699a86-e664-4049-8421-6b39a07ae521code6# 👉 Uncomment and fill this in: # found_bias_distribution = ... your code here # found_variance_distribution = ... your code here # If you want to continue without completing Part 1, leave the default: begin found_bias_distribution = Normal(0.0, 1.0) found_variance_distribution = InverseGamma(1/2,1.) end;metadatashow_logsèdisabled®skip_as_script«code_folded$8bbddac3-d8a1-4787-bccf-02b7f4e5f055cell_id$8bbddac3-d8a1-4787-bccf-02b7f4e5f055code### YOUR CODE HEREmetadatashow_logsèdisabled®skip_as_script«code_folded$63f66b98-ded4-46dd-b42a-891989a39ea7cell_id$63f66b98-ded4-46dd-b42a-891989a39ea7codebegin __name_id_check = if !@isdefined(name) var_not_defined(:name) elseif !@isdefined(student_id) var_not_defined(:student_id) elseif !(name isa String && student_id isa Integer) danger("Check that `name` is a String and `student_id` is an Int.") elseif name == "Pietje Puk" || student_id == 0123456 warning_box("Fill in your name and student ID [above](#name).") else correct("Looks like you filled in your name and ID correctly, thanks $(name)!") end endmetadatashow_logsèdisabled®skip_as_script«code_folded$a727a09c-7744-4f8b-a7c3-9f157e37ea26cell_id$a727a09c-7744-4f8b-a7c3-9f157e37ea26codebegin if !@isdefined(found_reliability) var_not_defined(:found_reliability) elseif !(found_reliability isa Distribution{Univariate, <:Any}) keep_working(md"`found_reliability` should be a univariate `Distribution`.") elseif found_reliability == Beta(1.0, 1.0) md"> Fill in your result above." else correct(md"You entered a $(typeof(found_reliability)). Estimated detection probability: mean = $(round(mean(found_reliability), digits=3)), std = $(round(std(found_reliability), digits=4)).") end endmetadatashow_logsèdisabled®skip_as_script«code_folded$48e39a6f-249c-4ba1-a32e-061c08eba644cell_id$48e39a6f-249c-4ba1-a32e-061c08eba644codemd""" During the same calibration run, the beacon also logged whether each transmitted echo pulse was **successfully received** or **lost** to background noise. These outcomes are stored in `echo_successes`. - [1 point] Specify a **probabilistic model** with a likelihood and a suitable prior distribution. - [1 point] Use RxInfer to **infer a posterior distribution** over the echo success probability. Store your result as `found_reliability`. - [1 point] What **prior** did you choose, and why? """metadatashow_logsèdisabled®skip_as_script«code_folded$021b20bc-d0ec-48d8-af25-26a29f9b4de4cell_id$021b20bc-d0ec-48d8-af25-26a29f9b4de4codename = "Pietje Puk"metadatashow_logsèdisabled®skip_as_script«code_folded$b56a926e-7e4d-4d44-b399-bb042de8c071cell_id$b56a926e-7e4d-4d44-b399-bb042de8c071codemcomparison_comment = md""" The x-coordinate uncertainty of `pos_2d` compared to `x_pos_combined` is... """metadatashow_logsèdisabled®skip_as_script«code_folded$341618ea-677b-499e-b518-8a577e997e97cell_id$341618ea-677b-499e-b518-8a577e997e97codeshow_warehouse()metadatashow_logsèdisabled®skip_as_script«code_folded$2064d975-d9ad-4ddd-9d81-87f64363f998cell_id$2064d975-d9ad-4ddd-9d81-87f64363f998codeDprior_choice_motivation = md""" I chose this prior because... """metadatashow_logsèdisabled®skip_as_script«code_folded$e4f3e468-fec8-4c3f-941d-0003e24a20f6cell_id$e4f3e468-fec8-4c3f-941d-0003e24a20f6code### YOUR CODE HEREmetadatashow_logsèdisabled®skip_as_script«code_folded$8555f14e-df09-4f11-82c0-cd5935d66418cell_id$8555f14e-df09-4f11-82c0-cd5935d66418code!feedback = md""" This assignment took me ... minutes. _I enjoyed this assignment?_ (yes / no / neutral) ... _I found the assignment clear?_ (yes / no / neutral) ... Did I use LLM tools (ChatGPT, Claude, Copilot, etc.) to help with this assignment? (yes / no) ... Was it helpful? ... """metadatashow_logsèdisabled®skip_as_script«code_folded$49e485c8-4b63-4fde-a7b6-6dc919e9bc38cell_id$49e485c8-4b63-4fde-a7b6-6dc919e9bc38codemd""" - [1 point] Specify a probabilistic model for the Type A sensor observations. - [1 point] Use RxInfer to **infer a posterior distribution** over the robot's x-coordinate. Store your result as `x_pos_from_A`. - [1 point] What **prior** did you use for x, and why? """metadatashow_logsèdisabled®skip_as_script«code_folded$7dc3b839-c454-486f-b8f7-747332a7e45ccell_id$7dc3b839-c454-486f-b8f7-747332a7e45ccode__name_id_checkmetadatashow_logsèdisabled®skip_as_script«code_folded$3dac2b2c-494b-498a-a74b-a11349af54c3cell_id$3dac2b2c-494b-498a-a74b-a11349af54c3code8md""" # Feedback Please fill in the feedback below. """metadatashow_logsèdisabled®skip_as_script«code_folded$103f53b2-be86-48e6-b380-fbc138c2cd33cell_id$103f53b2-be86-48e6-b380-fbc138c2cd33code### YOUR CODE HEREmetadatashow_logsèdisabled®skip_as_script«code_folded$69096420-5636-48e4-8380-24fe9aafab37cell_id$69096420-5636-48e4-8380-24fe9aafab37codemd""" # Introduction: robot localization An autonomous logistics robot is navigating a large **warehouse** (40 m wide × 30 m tall). Because GPS signals are unreliable indoors, the robot uses **ultrasonic beacons** mounted at fixed, known positions on the walls. Each beacon emits a short sound pulse and measures the time until it detects the returning echo. From this time-of-flight measurement, it computes a distance estimate to the robot. ## Warehouse The warehouse has two types of sensors: - Type A, mounted on the west wall (x = 0 m). - Type B, mounted on the east wall (x = 40 m). Each sensor on the west wall measures the horizontal distance to the robot, giving a direct (noisy) estimate of the robot's x-coordinate. Each sensor on the east wall measures the distance from the far side, which after correction also gives an estimate of the robot's x-coordinate. In this assignment you will: 1. **Characterize** the sensor noise and reliability using calibration data. 2. **Estimate the x-coordinate** of the robot from multiple independent sensor readings. 3. **Estimate the 2D position** of the robot using a multivariate probabilistic model. """metadatashow_logsèdisabled®skip_as_script«code_folded$b7aea8f0-a5ac-487f-a91b-372812c5353bcell_id$b7aea8f0-a5ac-487f-a91b-372812c5353bcode9fusion_comment = md""" The combined estimate is... """metadatashow_logsèdisabled®skip_as_script«code_folded$f6617439-fb86-4425-925a-6e705a78a2b3cell_id$f6617439-fb86-4425-925a-6e705a78a2b3codeٳ# 👉 Uncomment and fill this in: # found_reliability = ... your code here # If you want to continue without this exercise, leave the default: found_reliability = Beta(1.0, 1.0)metadatashow_logsèdisabled®skip_as_script«code_folded$e47f428e-cc70-4a89-82a4-3e4dc563129acell_id$e47f428e-cc70-4a89-82a4-3e4dc563129acodemd""" # Part 1: Sensor Calibration Before deploying the sensors, we run a **calibration test**. The robot is placed at a known position, and a single Type A sensor repeatedly measures the distance to a reflector at a known distance of `calib_distance` = $(calib_distance) m. The **calibration residuals** (measured distance minus known distance) are stored in `calib_residuals`. A well-calibrated sensor should have residuals centred at zero. In practice, manufacturing tolerances and mounting geometry can introduce a small **systematic bias** ``\delta_A``. We also want to know the spread of the measurements, i.e., the **systematic variance** ``\sigma^2_A``. """metadatashow_logsèdisabled®skip_as_script«code_folded$41c2a20b-a664-492c-8821-682ecd34647ccell_id$41c2a20b-a664-492c-8821-682ecd34647ccode### YOUR CODE HEREmetadatashow_logsèdisabled®skip_as_script«code_folded$825db4bb-77aa-4686-82a7-0da72589b925cell_id$825db4bb-77aa-4686-82a7-0da72589b925codechint(md""" The combined posterior is proportional to the product of the individual posteriors. """)metadatashow_logsèdisabled®skip_as_script«code_folded$75fc1627-1e01-433f-9a44-791d982d4944cell_id$75fc1627-1e01-433f-9a44-791d982d4944codemd""" ## Data overview The following data are available to you: - `calib_residuals` — a vector of **$(length(calib_residuals)) calibration residuals** (measurement − known distance) from a single Type A sensor pointed at a reflector at a known distance of `calib_distance` = $(calib_distance) m. - `x_obs_A` — **$(length(x_obs_A)) x-coordinate estimates** from the Type A sensors (noise ``\sigma^2_A = `` ? m). - `x_obs_B` — **$(length(x_obs_B)) x-coordinate estimates** from the Type B sensors (noise ``\sigma^2_B = 0.25`` m). - `pos_obs` — **$(length(pos_obs)) 2D position estimates** `[x, y]` from a combined positioning subsystem. """metadatashow_logsèdisabled®skip_as_script«code_folded$abc102e0-5e58-4ac1-bbc8-b28dce742ae7cell_id$abc102e0-5e58-4ac1-bbc8-b28dce742ae7codestudent_id = 0123456metadatashow_logsèdisabled®skip_as_script«code_folded$2378b595-fa29-4a32-b428-1a5ecf4b05d7cell_id$2378b595-fa29-4a32-b428-1a5ecf4b05d7codecmd""" # Appendix The following cells are not important for the understanding of this assigment. """metadatashow_logsèdisabled®skip_as_script«code_folded$705b06c6-600a-411a-b397-726e4d5acf3acell_id$705b06c6-600a-411a-b397-726e4d5acf3acode%begin # Sensor layout (y-positions on each wall, used for warehouse visualisation only) sensor_pos_A = [5.0, 12.0, 19.0, 24.0, 28.0] # west wall sensor_pos_B = [6.0, 15.0, 26.0] # east wall # Noise standard deviations (given to students in the problem description) sigma_A = 0.20 # m (Type A sensor) sigma_B = 0.50 # m (Type B sensor) sigma_z = 0.35 # m (2D positioning subsystem, isotropic) Λ_z = inv(sigma_z*diageye(2)) # ── Part 1: calibration data ────────────────────────────────────────────── calib_distance = 8.0 # m (true distance to reflector) rng_calib = StableRNG(1) calib_measurements = [ calib_distance + secret_bias + sigma_A * randn(rng_calib) for _ in 1:200 ] calib_residuals = calib_measurements .- calib_distance # ── Part 1b: echo pulse reliability data ───────────────────────────────── const secret_true_p = 0.82 # true detection probability rng_echo = StableRNG(4) echo_successes = rand(rng_echo, Bernoulli(secret_true_p), 300) # ── Part 2: x-position measurements ────────────────────────────────────── rng_x = StableRNG(2) x_obs_A = [secret_true_x + sigma_A * randn(rng_x) for _ in 1:6] x_obs_B = [secret_true_x + sigma_B * randn(rng_x) for _ in 1:8] # ── Part 3: 2D position measurements ───────────────────────────────────── rng_2d = StableRNG(3) pos_obs = [ [secret_true_x + sigma_z * randn(rng_2d), secret_true_y + sigma_z * randn(rng_2d)] for _ in 1:10 ] end;metadatashow_logsèdisabled®skip_as_script«code_folded$3a9a632a-a3d5-4093-b9ed-ae7f6d90b46fcell_id$3a9a632a-a3d5-4093-b9ed-ae7f6d90b46fcodeٰbegin using Plots; default(label="") using Distributions using RxInfer using StatsPlots using StableRNGs using LinearAlgebra using BmlipTeachingTools using Markdown endmetadatashow_logsèdisabled®skip_as_script«code_folded$6a26d308-3667-49a8-9f4a-0e6360230760cell_id$6a26d308-3667-49a8-9f4a-0e6360230760codeOcalib_histogram_comment = md""" Looking at the histogram, I find that... """metadatashow_logsèdisabled®skip_as_script«code_folded$f8c27934-94a2-4817-aaca-ab818a3e0273cell_id$f8c27934-94a2-4817-aaca-ab818a3e0273codemd""" - [2 points] Specify a probabilistic model with a **multivariate Normal likelihood** and use RxInfer to **infer a posterior distribution** over the 2D position vector `μ_z = [x, y]`. Store your result as `pos_2d`. - [1 point] **Compare** the x-coordinate uncertainty of `pos_2d` with that of `x_pos_combined` from Part 2. Which gives a more precise x-estimate, and why? - [1 point] Which point leads to the biggest drop in posterior uncertainty (expressed as determinant of the posterior covariance)? """metadatashow_logsèdisabled®skip_as_script«code_folded$044f3410-2b9f-11f1-2fb2-ddeeb7049f22cell_id$044f3410-2b9f-11f1-2fb2-ddeeb7049f22codetitle("Resit Assignment")metadatashow_logsèdisabled®skip_as_script«code_folded$73b34659-be3d-4184-8fa5-adba70a7b2cdcell_id$73b34659-be3d-4184-8fa5-adba70a7b2cdcodebegin # Well found!! 😅 const secret_true_x = 22.5 # m (robot's true x-position) const secret_true_y = 14.8 # m (robot's true y-position) const secret_bias = 0.12 # m (sensor mounting bias in calibration) end;metadatashow_logsèdisabled®skip_as_script«code_folded$7f22dadc-39b5-417d-b29a-c91881a23097cell_id$7f22dadc-39b5-417d-b29a-c91881a23097codeTableOfContents()metadatashow_logsèdisabled®skip_as_script«code_folded$b90a0f2a-1117-4b71-a717-d711f5ea2223cell_id$b90a0f2a-1117-4b71-a717-d711f5ea2223code@exercise_statement("2D Localization", header_level=2, big=true) metadatashow_logsèdisabled®skip_as_script«code_folded$66deb52f-ee85-48d6-a56e-f6f43111230fcell_id$66deb52f-ee85-48d6-a56e-f6f43111230fcodevmd""" The Type A sensors alone give a good estimate of x, but we also have readings from the Type B sensors. By combining both, we can improve our estimate further. - [1 point] Infer a posterior distribution over x using the **Type B sensor** (``\sigma^2_B = `` $(sigma_B^2) m) observations as well (store as `x_pos_from_B`). - [2 point] **Combine** `x_pos_from_A` and `x_pos_from_B` into a single improved estimate using **Bayes' rule**. Store the combined result as `x_pos_combined`. - [2 point] Plot the three distributions (`x_pos_from_A`, `x_pos_from_B`, `x_pos_combined`). What can you say about the combined result? """metadatashow_logsèdisabled®skip_as_script«code_folded$3d29e63b-8478-40cb-be8e-0516cfc59e0dcell_id$3d29e63b-8478-40cb-be8e-0516cfc59e0dcode|md""" - [1 point] Specify a **probabilistic model** for `calib_residuals` that includes ``\delta_A`` and ``\sigma^2_A``. - [2 points] Infer a **posterior distribution** for the sensor bias ``\delta_A`` and variance ``\sigma^2_A``, and store your result as `found_bias_distribution` and `found_variance_distribution`. - [1 point] Explain how you chose your prior distribution. """metadatashow_logsèdisabled®skip_as_script«code_folded$ef5c9636-42a4-49f8-8c66-68a590914f12cell_id$ef5c9636-42a4-49f8-8c66-68a590914f12codeٻlet scatter( first.(pos_obs), last.(pos_obs); label="2D observations", c=:purple, ms=6, xlabel="x (m)", ylabel="y (m)", title="2D position measurements", aspect_ratio=1, ) endmetadatashow_logsèdisabled®skip_as_script«code_folded$98d51c6e-b70d-4874-84c9-007a51ae389dcell_id$98d51c6e-b70d-4874-84c9-007a51ae389dcode٣md""" $(exercise_statement("Sensor Noise Model")) - [1 point] Plot a **histogram** of `calib_residuals`. What can you say about the shape of the distribution? """metadatashow_logsèdisabled®skip_as_script«code_folded$dd51677f-3a0c-4fa6-b896-174915fe7417cell_id$dd51677f-3a0c-4fa6-b896-174915fe7417codemd""" > #### Loading? > Note: This notebook will **take a couple of minutes to start**, because Julia is downloading and precompiling the packages that we use in this notebook (Plots, RxInfer, Distributions, BmlipTeachingTools). > > You can check the progress in the **"Status" tab** in the bottom right. > > This package installation and precompilation will happen only once. Afterwards, this notebook (and future notebooks that use the same package versions) will launch much more quickly. """metadatashow_logsèdisabled®skip_as_script«code_folded$744d90e7-397e-45d5-ab11-fa1d5c8f9c2acell_id$744d90e7-397e-45d5-ab11-fa1d5c8f9c2acodemd""" # Part 3: 2D Position Estimation So far, we have only estimated the robot's **x-coordinate**. We now also want to know its **y-coordinate** to fully localise the robot in the warehouse. Suppose we have 2D measurements from a separate positioning subsystem. Each measurement is a 2-element vector $[x, y]$ with **isotropic** Gaussian noise: $$z[i] \sim \mathcal{N}\!\left(\boldsymbol{\mu_z},\; \Lambda_z^{-1} \right)$$ """metadatashow_logsèdisabled®skip_as_script«code_folded$9d14fd1c-e704-4858-9842-fe088f18ec9ccell_id$9d14fd1c-e704-4858-9842-fe088f18ec9ccodekbegin if !@isdefined(found_variance_distribution) var_not_defined(:found_variance_distribution) elseif !(found_variance_distribution isa Distribution{Univariate, <:Any}) keep_working(md"`found_variance_distribution` should be a univariate `Distribution`.") elseif found_variance_distribution == InverseGamma(1/2, 1.) md"> Fill in your result above to see the estimated bias." else correct(md"You have entered a $(typeof(found_variance_distribution)). Estimated variance: mode = $(round(mode(found_variance_distribution), digits=4)) m, std = $(round(std(found_variance_distribution), digits=4)) m.") end endmetadatashow_logsèdisabled®skip_as_script«code_folded$bb3362b6-6aa0-4796-b3b1-0385724feaddcell_id$bb3362b6-6aa0-4796-b3b1-0385724feaddcodelet p = scatter(x_obs_A; label="Type A", c=:blue, marker=:ltriangle, ms=7, xlabel="Sensor index", ylabel="x estimate (m)", title="x-position measurements", ylim=(mean(x_obs_A) - 3, mean(x_obs_A) + 3), ) scatter!(p, x_obs_B; label="Type B", c=:darkorange, marker=:rtriangle, ms=7, ) hline!(p, [mean([x_obs_A; x_obs_B])]; lw=2, ls=:dash, c=:gray, label="Data mean") p endmetadatashow_logsèdisabled®skip_as_script«code_folded$1a940dbb-e1de-4c8f-8cb6-7d0b87f98b36cell_id$1a940dbb-e1de-4c8f-8cb6-7d0b87f98b36codeQexercise_statement("Estimating x from Type A Sensors", header_level=2, big=true) metadatashow_logsèdisabled®skip_as_script«code_foldedënotebook_id$443b7d04-4562-11f1-80ba-997e31e6b12cin_temp_dir¨metadata